登录网站时,服务器返回一串字符;调用API时,需要在请求头里塞一段密文;谈论加密货币时,动不动说“发了多少Token”……“Token”这个词在技术圈被高频使用,但很多人对它的理解是模糊的:它是一段字符串?是一个加密凭证?还是代表某种价值的数字资产?
其实,Token的原意是“令牌”或“代币”,本质上是一串具有特定含义的数据。它在不同领域扮演着不同的角色:在Web开发中,它是身份认证的凭证;在区块链世界里,它是价值流通的载体。在此,小编将从这两个维度,深入浅出地解析Token的核心概念、常见类型及应用实践。
在现实世界中,令牌是一种“授权凭证”。比如你去洗浴中心,前台给你一个手牌,凭手牌可以开柜子、消费记帐。手牌本身没有价值,但它关联了后台的身份信息和服务权限。
数字世界中的Token也是如此。它是一个字符串(通常经过加密或签名),客户端持有它,服务器端能够验证它,从而确认“你是谁”“你能做什么”。Token的出现,解决了传统Session认证在分布式系统中的诸多痛点,也为区块链的去中心化交易提供了基础。
在Web开发领域,Token最常见的应用场景是无状态身份认证。早期网站使用Session(会话)——用户登录后,服务器在内存中存储一个Session ID,浏览器用Cookie携带它。但在微服务、移动端、跨域请求等场景下,Session方式捉襟见肘。于是,基于Token的认证方案成为主流。
JWT是一种开放标准(RFC 7519),它将用户信息封装成三段式字符串:Header(头部)、Payload(载荷)、Signature(签名),每段用Base64Url编码,点号连接。
Header:声明签名算法(如HS256或RS256)和Token类型。
Payload:存放用户身份信息(如user_id、role)以及过期时间(exp)、签发时间(iat)等声明。
Signature:对前两部分进行签名,防止篡改。
客户端收到JWT后,后续请求直接在HTTP头中携带(如Authorization: Bearer <JWT>),服务器通过验证签名和过期时间来判断合法性和时效性。
优点:无需服务端存储会话,天然适合分布式系统;跨语言、跨平台。
缺点:一旦签发,在有效期内无法主动撤销(除非配合黑名单机制);Payload体积较大,会增加请求头大小。
Bearer Token就是一个随机生成的字符串(如UUID或哈希值),没有任何内部结构。客户端在请求头中携带Bearer <token>,服务器根据这个字符串去数据库或缓存中查询对应的用户和权限。
它常用于OAuth 2.0授权框架中,作为访问令牌(Access Token)。与JWT相比,Bearer Token的优点是体积小,且服务端可以随时失效(只要删除存储记录即可)。缺点是每次请求都需要查询后端存储,增加延迟。
Access Token的有效期通常很短(如15分钟-2小时),以减少泄露风险。但在用户体验上,频繁要求用户重新登录很糟糕。于是有了Refresh Token:携带更长的有效期(如7天或30天),客户端可以用它去认证服务器换取新的Access Token,而无需用户重新输入密码。
Refresh Token通常存储在HTTP-only Cookie或移动端的安全存储中,仅用于“刷新”这一特定接口,不能用于访问业务资源。
用户登录流程:
客户端提交用户名/密码 → 服务器验证通过 → 生成Access Token(JWT形式,有效期2h)和Refresh Token(随机字符串,存储于Redis,有效期7d)→ 返回给客户端。
客户端将Access Token存入内存或本地存储,将Refresh Token存入HttpOnly Cookie。
后续API请求携带Authorization: Bearer <Access Token>。
Access Token过期后,客户端使用Refresh Token调用/refresh接口,服务器验证Refresh Token有效后,签发新的Access Token。
API网关中的Token校验:微服务架构中,网关层统一解析JWT,提取用户身份信息后转发给下游服务,避免每个服务重复验证。
如果说Web中的Token是“权限凭证”,那么区块链中的Token则是“价值凭证”。它不依赖中央服务器,而是由去中心化网络共同维护。根据功能不同,主要分为两类。
最典型的就是比特币、以太币以及各类“山寨币”。每个单位完全等价,可以分割(例如0.001个比特币)。在以太坊上,遵循ERC-20标准的代币已成为行业规范。它们常用于支付、激励、治理投票或代表某种权益(如积分、股权)。
技术本质:智能合约维护一个地址到余额的映射表,用户通过转账函数改变余额。Token本身不存储业务逻辑,只是合约中的一个数字。
每个NFT拥有唯一的标识符和元数据,不可分割,也不等价。它被用来代表数字艺术品、游戏道具、域名、甚至房产凭证。以太坊的ERC-721和ERC-1155是主流标准。
与Web Token的本质区别:Web中的Token由中心化服务器验证,区块链Token由共识网络验证,无需信任任何第三方机构。
在去中心化金融(DeFi)中,Token不仅是“币”,还可以是“流动性凭证”或“治理权”。例如,用户向去中心化交易所提供资金后,会获得“LP Token”,代表其贡献份额,赎回时可以取回本金+手续费分红。
此外,Token也常作为“Gas”来支付网络手续费。以以太坊为例,ETH本身就是一种原生Token,执行智能合约需要消耗ETH。
| 维度 | Web Token(如JWT) | 区块链Token(如ERC-20) |
|---|---|---|
| 本质 | 权限凭证,不具价值 | 价值载体,可流通交易 |
| 存储方式 | 客户端(localStorage / Cookie)或服务端(Redis) | 分布式账本(区块链上) |
| 验证方式 | 验证签名 + 过期时间(中心化) | 全网节点通过共识算法验证 |
| 可撤销性 | 服务端可主动销毁(如将Token加入黑名单) | 除非智能合约硬编码,否则不可撤销(但可冻结地址) |
| 匿名性 | 通常与真实身份关联 | 可控匿名,只有地址 |
| 典型应用 | 用户登录、API访问控制 | 加密货币、去中心化金融、NFT |
无论是Web中的JWT,还是加密货币钱包里的私钥(本质上也是Token的一种),安全都是使用Token的第一要务。
使用HTTPS:防止Token在传输过程中被窃听。
选择合适的存储位置:敏感度高的Token(如Refresh Token)应放在HttpOnly Cookie中,避免XSS攻击窃取。访问业务的Access Token可放在内存或localStorage,但需配合短过期时间。
设置合理的过期时间:Access Token不超过2小时,Refresh Token不超过7-30天。
禁用自动签发过长有效期的Token:用户退出时,应主动将Refresh Token失效。
使用强签名算法:JWT不要使用none算法或弱密钥。
私钥离线存储:使用硬件钱包或冷存储,防止网络攻击。
警惕授权签批:不要随意向未知项目授权Token使用权(即“Approve”操作),避免被恶意合约盗取资产。
验证合约地址:确保参与的DeFi项目合约经过安全审计。
在Web3.0概念兴起的当下,Web中的身份Token与区块链中的价值Token正在逐渐融合。例如,去中心化身份(DID) 系统使用自控制的Token来代表用户身份,可跨平台认证,无需任何中心化服务器。另外,灵魂绑定Token(Soulbound Token) 被设计为不可转让的身份凭证,用于记录学历、资格、声誉等社会关系。
而在传统的Web开发领域,Token技术也在进化:Faas(函数即服务) 中使用轻量级JWT进行冷启动验证;零知识证明(ZKP) 技术让Token在不暴露用户信息的前提下完成身份验证。
Token这个词之所以让人困惑,是因为它横跨了“权限”和“价值”两个看似无关的领域。但它们的底层逻辑是相通的:用一个可验证的数据片段,替代了对中心的直接信任——无论是信任一个登录状态,还是信任一笔资产。
当你下次登录网站时,可以想一想:哦,浏览器里正藏着一个JWT。当你打开加密钱包时,也可以意识到:那些数字其实是区块链上的Token。理解Token,就是理解现代数字世界的运行规则。